from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from utils import DriverUtils



class CaseActionKeys:
    def __init__(self):
        self.driver = DriverUtils.open_driver()
    # 封装公用元素定位方法
    def f_d(self,by,value):
        """
        将浏览器对象和元素对象拷贝过来，再进行显示等待，然后捕获异常，返回元素对象
        需要传参的内容：元素定位表达式
        :param locaiton:元素定位表达式，因为实参是元组，所以在find_element中需要解包使用。
        :return:返回元素对象，以供页面对象操作方法直接调用方法获取元素对象
        """
        # 捕获异常
        try:
            # 对元素定位加上显示等待
            el = WebDriverWait(self.driver,10,1).\
                until(lambda x:x.find_element(by=by,value=value))  # 通过传参方式传递元素定位表达式，并进行解包
        except Exception as e:
            # 抛出异常
            raise e
        # 定位到元素后，返回元素对象
        return el


    def open(self,url):
        """
        打开URL网址
        :param url: URL
        """
        self.driver.get(url)

    # 输入文本
    def input(self,by,value,data):
        """
        定义文本框输入方法
        :param by_value: 元素定位表达式 （By,value）元组
        :param data_text: 测试数据
        """
        self.f_d(by,value).send_keys(data)

    # 点击按钮
    def click(self,by,value):
        """
        获取元素，并点击
        :param by_value: 元素定位表达式（By,value）元组
        """
        self.f_d(by,value).click()

